package cn.jianml.excel.Listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
 * @author wujian
 * @time 2020/1/7
 */
@Slf4j
public abstract class ExcelListener extends AnalysisEventListener {

    public static final int BATCH_COUNT = 1000;

    private List<Object> datas = new ArrayList<Object>();

    public void setDatas(List<Object> datas) {
        this.datas = datas;
    }

    public List<Object> getDatas() {
        return datas;
    }

    /**
     * 每解析一行会执行一次invoke
     */
    @Override
    public void invoke(Object o, AnalysisContext analysisContext) {
        log.info("解析到一条数据:{}", JSON.toJSONString(o));
        addListBefore(o);
        datas.add(o);
        doListAfter(o);
    }

    /**
     * 所有数据解析完成了 都会来调用
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        doAllListAfter();
    }

    /**
     * 在添加到List集合之前
     */
    public abstract void addListBefore(Object object);

    /**
     * 在添加到List集合之后
     */
    public abstract void doListAfter(Object object);

    /**
     * 所有数据都解析完后
     */
    public abstract void doAllListAfter();

}
